// 导入先后顺序【node -> 第三方 -> 自己的模块】
const path = require('path')

const Koa = require('koa')
const { koaBody } = require('koa-body')
const parameter = require('koa-parameter')

const errHandler = require('../response/handler')

const router = require('../router/index')
const app = new Koa()

// 使用参数校验
parameter(app)
// 注意这个需要在router.routes之前 否则会获取不到 ctx.request.body
app.use(
  koaBody({
    multipart: true,
    // formLimit: '2mb', // 默认为 56k
    formidable: {
      uploadDir: path.join(__dirname, '../upload'), // 文件上传目录
    },
    parsedMethods: ['POST', 'PUT', 'DELETE'],
  })
)
// 使用路由
app.use(router.routes()) // .use(router.allowedMethods(''))

app.on('error', (err, ctx) => {
  // 统一错误处理 通过 ctx.app.emit('error', err,ctx) 来上报错误 这里接收上报的错误
  errHandler(err, ctx)
})

module.exports = app
